home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / ab20 / unarced / graphics / anim / iff.h < prev    next >
C/C++ Source or Header  |  1995-03-17  |  3KB  |  125 lines

  1. #ifndef IFF_H
  2. #define IFF_H
  3. #ifndef COMPILER_H
  4. #include "compiler.h"
  5. #endif
  6. #ifndef LIBRARIES_DOS_H
  7. #include "libraries/dos.h"
  8. #endif
  9. #ifndef OFFSET_BEGINNING
  10. #define OFFSET_BEGINNING OFFSET_BEGINING
  11. #endif
  12. typedef LONG IFFP;
  13. #define IFF_OKAY 0L
  14. #define END_MARK -1L
  15. #define IFF_DONE -2L
  16. #define DOS_ERROR -3L
  17. #define NOT_IFF -4L
  18. #define NO_FILE -5L
  19. #define CLIENT_ERROR -6L
  20. #define BAD_FORM -7L
  21. #define SHORT_CHUNK -8L
  22. #define BAD_IFF -9L
  23. #define LAST_ERROR BAD_IFF
  24. #define CheckIFFP() { if (iffp != IFF_OKAY) return(iffp); }
  25. typedef LONG ID;
  26. #define MakeID(a,b,c,d) ( (LONG)(a)<<24L | (LONG)(b)<<16L | (c)<<8 | (d) )
  27. #define FORM MakeID('F','O','R','M')
  28. #define PROP MakeID('P','R','O','P')
  29. #define LIST MakeID('L','I','S','T')
  30. #define CAT MakeID('C','A','T',' ')
  31. #define FILLER MakeID(' ',' ',' ',' ')
  32. #define NULL_CHUNK 0L
  33. typedef struct {
  34. ID ckID;
  35. LONG ckSize;
  36. } ChunkHeader;
  37. typedef struct {
  38. ID ckID;
  39. LONG ckSize;
  40. UBYTE ckData[ 1 ];
  41. } Chunk;
  42. #define szNotYetKnown 0x80000001L
  43. #define IS_ODD(a) ((a) & 1)
  44. #define WordAlign(size) ((size+1)&~1)
  45. #define ChunkPSize(dataSize) (long)(WordAlign(dataSize) + sizeof(ChunkHeader))
  46. typedef struct {
  47. ID ckID;
  48. LONG ckSize;
  49. ID grpSubID;
  50. } GroupHeader;
  51. typedef struct {
  52. ID ckID;
  53. LONG ckSize;
  54. ID grpSubID;
  55. UBYTE grpData[ 1 ];
  56. } GroupChunk;
  57. #ifdef FDwAT
  58. typedef IFFP ClientProc(struct _GroupContext *);
  59. #else
  60. typedef IFFP ClientProc();
  61. #endif
  62. typedef struct _ClientFrame {
  63. ClientProc *getList, *getProp, *getForm, *getCat;
  64. } ClientFrame;
  65. typedef struct _GroupContext {
  66. struct _GroupContext *parent;
  67. ClientFrame *clientFrame;
  68. BPTR file;
  69. LONG position;
  70. LONG bound;
  71. ChunkHeader ckHdr;
  72. ID subtype;
  73. LONG bytesSoFar;
  74. } GroupContext;
  75. #define ChunkMoreBytes(gc) ((gc)->ckHdr.ckSize - (gc)->bytesSoFar)
  76. #ifdef FDwAT
  77. extern IFFP OpenRIFF(BPTR, GroupContext *, ClientFrame *);
  78. extern IFFP OpenRGroup(GroupContext *, GroupContext *);
  79. extern IFFP CloseRGroup(GroupContext *);
  80. extern ID GetChunkHdr(GroupContext *);
  81. extern IFFP IFFReadBytes(GroupContext *, BYTE *, LONG);
  82. extern IFFP SkipGroup(GroupContext *);
  83. extern IFFP ReadIFF(BPTR, ClientFrame *);
  84. extern IFFP ReadIList(GroupContext *, ClientFrame *);
  85. extern IFFP ReadICat(GroupContext *);
  86. extern ID GetFChunkHdr(GroupContext *);
  87. extern ID GetF1ChunkHdr(GroupContext *);
  88. extern ID GetPChunkHdr(GroupContext *);
  89. #else
  90. extern IFFP OpenRIFF();
  91. extern IFFP OpenRGroup();
  92. extern IFFP CloseRGroup();
  93. extern ID GetChunkHdr();
  94. extern IFFP IFFReadBytes();
  95. extern IFFP SkipGroup();
  96. extern IFFP ReadIFF();
  97. extern IFFP ReadIList();
  98. extern IFFP ReadICat();
  99. extern ID GetFChunkHdr();
  100. extern ID GetF1ChunkHdr();
  101. extern ID GetPChunkHdr();
  102. #endif
  103. #ifdef FDwAT
  104. extern IFFP OpenWIFF(BPTR, GroupContext *, LONG);
  105. extern IFFP StartWGroup(GroupContext *, ID, LONG, ID, GroupContext *);
  106. extern IFFP EndWGroup(GroupContext *);
  107. extern IFFP OpenWGroup(GroupContext *, GroupContext *);
  108. extern IFFP CloseWGroup(GroupContext *);
  109. extern IFFP PutCk(GroupContext *, ID, LONG, BYTE *);
  110. extern IFFP PutCkHdr(GroupContext *, ID, LONG);
  111. extern IFFP IFFWriteBytes(GroupContext *, BYTE *, LONG);
  112. extern IFFP PutCkEnd(GroupContext *);
  113. #else
  114. extern IFFP OpenWIFF();
  115. extern IFFP StartWGroup();
  116. extern IFFP EndWGroup();
  117. extern IFFP OpenWGroup();
  118. extern IFFP CloseWGroup();
  119. extern IFFP PutCk();
  120. extern IFFP PutCkHdr();
  121. extern IFFP IFFWriteBytes();
  122. extern IFFP PutCkEnd();
  123. #endif
  124. #endif IFF_H
  125.